const db = require('../db/index')
const bcrypt = require('bcryptjs')
const jwt = require('jsonwebtoken')
const {
  expiresIn,
  jwtSecretKey
} = require('../secretkey/config')

module.exports = {
  regUser: (req, res) => {
    const {
      username,
      password
    } = req.body
    // 在数据库中查询用户名是否被占用
    db.query('select * from ev_user where username=?', username, (err, result) => {
      // sql语句执行失败
      if (err) return res.cc(err)
      // 用户名是否被占用
      if (result.length > 0) return res.cc('用户名已被占用')
      //  调用bcrypt.hashSync(明文秘钥,随机盐长度)方法对密码进行加密
      // console.log(bcrypt.hashSync(password, 10));
      // 注册成功向mysql中插入新用户
      db.query('insert into ev_user set ?', {
        username,
        password: bcrypt.hashSync(password, 10)
      }, (err, result) => {
        if (err) return res.cc(err)
        // 判断影响行数
        if (result.affectedRows !== 1) return res.cc('注册用户失败，请稍后再试')
        res.cc('注冊成功', 0)
      })
    })
  },
  login: (req, res) => {
    const {
      username,
      password
    } = req.body
    // 1 根据用户名查询数据库中是否有该用户
    db.query('select * from ev_user where username=?', username, (err, result) => {
      if (err) return res.cc(err)
      if (result.length !== 1) return res.cc('登录失败')
      // 2 拿数据库中加密的密码与未加密的密码进行判断是否密码正确

      if (!bcrypt.compareSync(password, result[0].password)) return res.cc('登录失败')
      // 3 密码与用户名都验证成功生成token并返回给客户端
      const user = {
        ...result[0],
        password: '',
        user_pic: ''
      }
      // console.log(user);
      // 生成token并响应
      const tokenStr = jwt.sign(user, jwtSecretKey, {
        expiresIn
      })
      // console.log(tokenStr);
      res.send({
        status: 0,
        message: '登录成功',
        token:'Bearer '+ tokenStr
      })
    })
  }

}